#ifndef XMLNODE_H
#define XMLNODE_H

#include "XML_global.h"

#include <vector>

using namespace std;
namespace xml{


    enum XMLSHARED_EXPORT NodeType
    {
        ELEMENT_NODE,
        TEXT_NODE
    };

    /*! ===================================================================
     *      @brief Classe de base uniquement utilisé pour le polymorphisme
     *  ===================================================================== */
    class XMLSHARED_EXPORT Node
    {
        /**********************************
         *          Public
         **********************************/
        public:

            /**********************************
             *          Constructors
             **********************************/

                Node();

            /**********************************
             *          Methods
             **********************************/


                Node &      FirstChild();
                Node &      GetChild(int i);

                NodeType    Type();


                Node &      AppendChild(Node & node);
                void        AppendChilds(vector<Node*> nodes);

                void        RemoveChild(int position);

                /**********************************
                 *          Virtual
                 **********************************/

                    virtual void        Print();
                    virtual void        Save(ofstream *f);
                    virtual string      Value();

            /**********************************
             *          Properties
             **********************************/

                vector<Node *>      Childs;

        /**********************************
         *          Protected
         **********************************/

                /**********************************
                 *          Properties
                 **********************************/

                    NodeType            m_Type;

        /**********************************
         *          Private
         **********************************/
        private :

            /**********************************
             *          Methods
             **********************************/

            /**********************************
             *          Properties
             **********************************/


                Node *              m_Parents;
    };
}
#endif // XMLNODE_H
